/*
 *  This file is part of Cube.
 *
 *  Cube is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Cube is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Cube.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package cube;

import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;

/**
 * The main class of the application.
 */
public class CubeApp extends SingleFrameApplication {

    final int origWidth = 1300;
    final int origHeight = 720;
    
    /**
     * At startup create and show the main frame of the application.
     */
    @Override protected void startup() {
        show(new CubeView(this));
        getApplication().getMainFrame().setSize(origWidth,origHeight);
        getApplication().getMainFrame().addComponentListener(componentListener);
    }
        
    ComponentListener componentListener = new ComponentListener() {
      public void componentHidden(ComponentEvent e) {
        //dump("Hidden", e);
      }

      public void componentMoved(ComponentEvent e) {
        int width = (getApplication().getMainFrame().getWidth() < origWidth) ? origWidth : getApplication().getMainFrame().getWidth();
        int height = (getApplication().getMainFrame().getHeight() < origHeight) ? origHeight : getApplication().getMainFrame().getHeight();   
        getApplication().getMainFrame().setSize(new Dimension(width, height));
      }

      public void componentResized(ComponentEvent e) {
        int width = (getApplication().getMainFrame().getWidth() < origWidth) ? origWidth : getApplication().getMainFrame().getWidth();
        int height = (getApplication().getMainFrame().getHeight() < origHeight) ? origHeight : getApplication().getMainFrame().getHeight();   
        getApplication().getMainFrame().setSize(new Dimension(width, height));
        }

      public void componentShown(ComponentEvent e) {
       // dump("Shown", e);
      }

      private void dump(String type, ComponentEvent e) {
        System.out.println(e.getComponent().getName() + " : " + type);
      }
    };
    
    
    public void componentResized(ComponentEvent e) {
        System.out.println(e.getComponent().getClass().getName() + " --- Resized ");            
    }


    
    /**
     * This method is to initialize the specified window by injecting resources.
     * Windows shown in our application come fully initialized from the GUI
     * builder, so this additional configuration is not needed.
     */
    @Override protected void configureWindow(java.awt.Window root) {
    }

    /**
     * A convenient static getter for the application instance.
     * @return the instance of CubeApp
     */
    public static CubeApp getApplication() {
        return Application.getInstance(CubeApp.class);
    }

    /**
     * Main method launching the application.
     */
    public static void main(String[] args) {
        launch(CubeApp.class, args);
    }
}
